package cn.jeefast.common.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 *
 * 类描述： double运算类
 * 创建人：秦单单
 * 创建时间：2018年7月25日 下午4:17:14
 *
 */
public class MyMath {
	/**
	 * 进行加法运算
	 */
	public static double add(double d1, double d2, int len) { // 进行加法运算
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return round(b1.add(b2).doubleValue(),len);
	}

	/**
	 * 进行减法运算
	 */
	public static double sub(double d1, double d2, int len) { // 进行减法运算
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return round(b1.subtract(b2).doubleValue(),len);
	}

	/**
	 * 进行乘法运算
	 */
	public static double mul(double d1, double d2, int len) { //
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return round(b1.multiply(b2).doubleValue(),len);
	}

	/**
	 * 进行除法运算
	 */
	public static double div(double d1, double d2, int len) {// 进行除法运算
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 *	进行四舍五入操作
	 */
	public static double round(double d, int len) { // 进行四舍五入操作
		BigDecimal b1 = new BigDecimal(d);
		BigDecimal b2 = new BigDecimal(1);
		// 任何一个数字除以1都是原数字
		// ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
		return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 进行舍尾操作
	 */
	public static double rejection(double d, int len) { // 取整
		BigDecimal b1 = new BigDecimal(d);
		BigDecimal b2 = new BigDecimal(1);
		// 任何一个数字除以1都是原数字
		// ROUND_HALF_UP是BigDecimal的一个常量，表示进行四舍五入的操作
		return b1.divide(b2, len, BigDecimal.ROUND_FLOOR).doubleValue();
	}

	/**
	 *  Double转String  如果已 .0结果就舍去
	 * @param d
	 * @return
	 */
	public static  String returnString (double d){
		DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
		System.out.println(decimalFormat.format(d));
		return decimalFormat.format(d);
	}
	
	public static void main(String[] args) {
		System.out.println("加法运算：" + MyMath.add(10.345, 3.333,3));
		System.out.println("乘法运算：" + MyMath.mul(20000, 271400,3));
		System.out.println("除法运算：" + MyMath.div(20000, 271400, 5));
		System.out.println("减法运算：" + MyMath.sub(10.345, 3.333,3));
		returnString(5.3);
	}



}
